package com.hpl.singletonmode.singleton;

/**
 * 懒汉模式（线程安全,双重检查锁定）
 * <p>
 * 此方法只在第一次调用的时候才加锁，所以性能更高。
 * 双重检查锁结合 volatile 关键字，确保实例初始化过程的线程可见性和安全性。
 * 适合需要频繁访问单例对象的场景，保证了延迟加载和高效访问。
 * </p>
 * @author hpl
 * @since 2024/12/12
 */
public class SingletonLazySafetyDouble {

    private static volatile SingletonLazySafetyDouble instance;

    private SingletonLazySafetyDouble() {}

    public static SingletonLazySafetyDouble getInstance() {
        if (instance == null) {
            synchronized (SingletonLazySafetyDouble.class) {
                if (instance == null) {
                    instance = new SingletonLazySafetyDouble();
                }
            }
        }
        return instance;
    }
}
